/*****************************************
 * Author:  huiaove
 * Email:   huiaove@126.com
 * Date:    2022 10.13
 * Address: TianJin
 * Version: V1.0.0
 * 修改记录：
 *             2022 10.13    张亚辉    TA协议V1.0               版本号:V1.0.0
 * 功能说明：JA 协议解析驱动
 * **************************************/
#include "TA_Protocol.h"
#include "malloc.h"
/*************************************
 * 功能：创建TA协议解析
 * 参数：
 *         tcb：JA协议控制块
 *         *Parse:解析函数
 *         addr:协议地址
 *         buf:数据缓存区
 *         size：数据缓存大小
 * 返回：无
 * **********************************/
void TA_Create(TA_Protocol_TCB *tcb, TA_BytesArray (*Parse)(TA_Protocol, uint8_t *), uint8_t *buf, uint8_t size)
{
    tcb->Parse = Parse; //解析函数
    tcb->parse_pointer = 0;
    tcb->data_buf = buf;
    tcb->Buf_Size = size;
}

/******************************************
 * 功能：TA解码数据
 * 参数：
 *         tcb:JA 协议解析控制块
 *         *data:数据指针
 *         len：数据长度
 * 返回：无
 * ***************************************/
TA_BytesArray TA_Decode_Array(TA_Protocol_TCB *tcb, uint8_t *data, uint8_t len)
{
    uint8_t i = 0;
    TA_BytesArray reply_buf;
    tcb->parse_pointer = 0;
    for (i = 0; i < len; i++)
    {
        if(tcb->parse_pointer==0)
        {
            tcb->protocol.Package_ID=data[0];
            tcb->parse_pointer++;
        }
        else if(tcb->parse_pointer==1)
        {
					  tcb->protocol.FrameType=data[1];
            tcb->parse_pointer++;
        }
        else if (tcb->parse_pointer==2)
        {
            tcb->protocol.Frame_sn=data[2];
            tcb->parse_pointer++;
        }
        else if (tcb->parse_pointer==3)
        {
            tcb->protocol.data_len=data[3];
            tcb->parse_pointer++;
        }
        else if(tcb->parse_pointer==4)
        {
            tcb->protocol.data=&data[4];
					  if(tcb->protocol.data_len<28)
						{
							mymemcpy(tcb->data_buf,&data[4],tcb->protocol.data_len);
					  }
            tcb->protocol.data=tcb->data_buf;
            tcb->Parse(tcb->protocol,tcb->data_buf);
						break;
        }
    }
    return reply_buf;
}
/********************************************
 * 功能：TA协议封装数据
 * 参数：
 *         tcb：JA协议
 *         *bytes：转为字节数组
 * 返回：无
 * *****************************************/
uint8_t TA_Package(TA_Protocol protocol, uint8_t *bytes)
{
    bytes[0] = protocol.Package_ID;
	  bytes[1] = protocol.FrameType;
    bytes[2] = protocol.Frame_sn;
	  bytes[3] = protocol.data_len; 
    mymemcpy(&bytes[4],protocol.data,protocol.data_len);
    return protocol.data_len+7;
}

